home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / machack / Hacks97 / WarriorsProgress.sit / Warrior’s Progress / source code / Source / Libraries / Sequence / Sequence.h < prev    next >
Text File  |  1997-06-28  |  1KB  |  68 lines

  1. // Sequence.h
  2.  
  3. #ifndef Sequence_h
  4. #define Sequence_h
  5.  
  6. #ifndef Assert_h
  7. #include "Assert.h"
  8. #endif
  9. #ifndef Prepositions_h
  10. #include "Prepositions.h"
  11. #endif
  12.  
  13. /***
  14.     The head and node classes should conform to these protocols:
  15.  
  16.     class Head: public Sequence<Head,Node>
  17.       {
  18.         public:
  19.             const Node *First() const;
  20.             const Node *Last() const;
  21.       };
  22.  
  23.     class Node
  24.       {
  25.         public:
  26.             const Node *Next() const;
  27.             const Node *Previous() const;
  28.             bool Owned() const;
  29.             const Head& Owner() const;
  30.       };
  31. ***/
  32.  
  33. template < class Head, class Node > class SequenceLoop;
  34.  
  35. template < class Head, class Node >
  36. class Sequence
  37.   {
  38.     friend class SequenceLoop<Head,Node>;
  39.     typedef SequenceLoop<Head,Node> Loop;
  40.     
  41.     private:
  42.         Loop *firstLoop;    // mutable
  43.     
  44.         // not implemented:
  45.             Sequence( const Sequence& );
  46.             void operator=( const Sequence& );
  47.     
  48.         void Register( Loop& ) const;
  49.         void Unregister( Loop& ) const;
  50.         
  51.     protected:
  52.         void WillRemove( Node& );
  53.         void WillAdd( Node&, Before, const Node * );
  54.         void WillAdd( Node&, After, const Node * );
  55.         
  56.     public:
  57.         Sequence()
  58.           : firstLoop( 0 )
  59.           {}
  60.         
  61.         ~Sequence()
  62.           {
  63.             Assert( firstLoop == 0 );
  64.           }
  65.   };
  66.  
  67. #endif
  68.